package com.java.chen.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InterruptedIOException;

import com.java.chen.Util;

/**
 * @author Administrator
 * 文件流操作相关
 * 文件流操作比较简单，只有那么几个方法文件字符流/文件字节流的输入输出
 * 常用的方法如下:
 * 下面这个就是基本的文件流的读写
 * FileInputStream FileOutputStream 
 * FileReader FileWriter 
 * ----------------------------------
 * 而这几个方法提供了对流的一些额外操作方法
 * FilterInputStream FilterOutputStream 
 * FilterReader FilterWriter 
 * 
 * 
 */
public class StreamOperationWithFile {
	public static void main(String[] args) {
		byteStream();
	}
	
	private static String localPath=Util.getLocalPath();
	
	/**
	 * 流的操作
	 * FileReader FileWrite
	 * FileInputStream FileOutputStream
	 */
	public static void byteStream(){
		try {
			
			//项目中有个图片 然后我们创建一个新文件夹等下放复制的文件
			File file=new File(localPath+"/newDir");
			if(file.exists()){
				file.delete();
			}
			file.mkdir();
			System.out.println(file.getAbsolutePath());
			File imageFile=new File(localPath+"/imag.jpg");
			
			//最后完成图片的输入输出后 发现新读取的图片打不开，损坏了，这是什么原因呢
			//因为字符流是2个字节读取，输出，有可能再读取图片时出现了单字节，这样读取输出时就容易出问题
			//所以非纯文本的数据如图片音乐文件视频文件都还是以字节流读取比较好
//			FileReader fr=new FileReader(imageFile);
//			FileWriter fw=new FileWriter(file.getAbsolutePath()+"\\newImage.jpg");
//			char c[]=new char[1024];
//			int leng=-1;
//			while ((leng=fr.read(c))!=-1) {
//				fw.write(leng);
//			}
//			fr.close();
//			fw.close();
			//======================================================
			//字节流输出后能正常打开图片
			FileInputStream fis=new FileInputStream(imageFile);
			FileOutputStream fos=new FileOutputStream(file.getAbsolutePath()+"\\newImage.jpg");
			byte b[]=new byte[1024];
			int leng=-1;
			while((leng=fis.read(b))!=-1){
				fos.write(b);//这里传入leng也可以fos.write(leng)
			}
			
			fos.close();
			fis.close();
			
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		   

		
	}
	/**
	 * FilterInputStream FilterOutputStream 
	 * FilterReader FilterWriter 
	 */
	public static void byteStreamFilter(){
		
	}
	
}	
